# 利用Google
import cv2
import mediapipe as mp #媒体管道
import time #时间处理

class position:
      def __init__(self):
            mpDraw = mp.solutions.drawing_utils #预先声明函数
            mpPose = mp.solutions.pose #点姿势方案
            pose = mpPose.Pose()  #物体姿势

            cap = cv2.VideoCapture(0)
            pTime = time.time()

            while True:
                success, img = cap.read()
                # 转化图像
                imgRGB = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) #转化为RGB，opencv用的是RGB格式的图片
                results = pose.process(imgRGB) #将转化图片赋值
                # print(results.pose_landmarks) #打印实际的地标参数值，xyz
                if results.pose_landmarks:
                    mpDraw.draw_landmarks(img, results.pose_landmarks, mpPose.POSE_CONNECTIONS) #点画地标 画下划线地标
                    # 枚举 id 和 地标
                    for id, lm in enumerate(results.pose_landmarks.landmark):
                        h, w, c = img.shape
                        #print(id, lm) #显示33个点的坐标的信息
                        cx, cy = int(lm.x * w), int(lm.y * h) #cx，cy分别为对应的点的像素坐标位置
                        cv2.circle(img, (cx, cy), 5, (255, 0, 0), cv2.FILLED) #改变对应圆圈，大小、颜色填充度等

                # 制作帧率显示
                cTime = time.time()
                fps = 1/(cTime-pTime)
                pTime = cTime
                # 显示帧率，第二个为数值，第三个参数是位置，文字样式，文字大小,颜色，粗度
                cv2.putText(img, str(int(fps)), (70,50),cv2.FONT_HERSHEY_PLAIN, 3,(255,0,0),3)
                cv2.imshow("Image", img)
                #cv2.waitKey(1) #每秒100帧，减小他可以设置为10
                if cv2.waitKey(1) & 0xFF == ord('Q'):
                        break
if __name__ == '__main__':
    position = position()
# 功能包介绍文档：https://google.github.io/mediapipe/solutions/pose.html
